Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] [MySqli] MySqli->query jak wyswietlic blad
codex
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 29.11.2015

Ostrzeżenie: (0%)
-----


Problem powstaje gdy próbuję wykonać dodawanie rekordu do utworzonej wcześniej bazy tabeli.
Niby nie wywala żadnych błędów, lecz gdy podglądam tabelę w PhpAdmin to widzę, że rekord nie został dodany.
Kod który skleciłem do tej pory nie wyświetla co to za błąd.
oto kod:

  1. $DBHOST= 'fdb2.biz.nf';
  2. $DBUSER='****dbuser****';
  3. $DBPASSWORD='****dbpassword****';
  4. $DBNAME='****dbname****';
  5. $TABNAME='userlog';
  6.  
  7.  
  8. $email = $_POST['enailAddress'];
  9. $password = $_POST['setPasswordx'];
  10. $userHost = $_SERVER['REMOTE_HOST'];
  11. $userBrowser = $_SERVER['HTTP_USER_AGENT'];
  12. $defaultUserLevel = '3';
  13.  
  14. $mysqli = new mysqli ( $DBHOST, $DBUSER, $DBPASSWORD, $DBNAME );
  15. if ($mysqli->connect_errno) {
  16. printf("<br>nie mozna zdefiniowac klasy --mysqli-- <br> error: %s <br>",
  17. $mysqli->connect_error);
  18. } else {
  19. printf ("<br>klasa mysqli zdefiniowana <br>");
  20. }
  21. $query = "INSERT INTO $TABNAME VALUE ( ' ', $email, $password,
  22. $defaultUserLevel,
  23. $userHost,
  24. $userBrowser)";
  25. if (!$mysqli->query($query)) printf ("nie mozna dodac rekordu<br> error: (IMG:style_emoticons/default/questionmark.gif) ?");
  26. $mysqli->close();


W dokumentacji (którą słabo rozumię) mysqli::query mam napisane, że metoda zwraca FALSE w przypadku błędu.
1. Jak wyświetlić jaki to błąd?
2. Ewentualnie co robię źle w tym kodzie ?

Ten post edytował codex 29.11.2015, 16:06:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Jeżeli pierwszą wartością jest primary index autoincrement, to ślesz mu nulla, a nie ' '.

A wyświetlenie błędu:
zamiast
  1. if (!$mysqli->query($query)) printf ("nie mozna dodac rekordu<br> error: questionmark.gif?");

to
  1. $mysqli->query($query) or die($mysqli->error);


Ten post edytował Damonsson 29.11.2015, 13:05:30
Go to the top of the page
+Quote Post
codex
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 29.11.2015

Ostrzeżenie: (0%)
-----


Zrobiłem jak pisałeś, teraz nie wywala żadnego komunikatu o błędzie jednak w PhpAdmin przeglądam tą samą tabelę po dodaniu 2 rekordów kolejnych widzę, że:

rekordy = 0;
nstępny autoindex = 1;

znaczy, że rekordu nie dodano, czy źle rozumiem ten cały PhpAdmin ?
-----------------------------------------------------------------------------
Przerobiłem linijkę z wyświetlaniem kodu z powrotem na taki zapis:
  1. if (!$mysqli->query($query)) printf("nie dodano rekordu error: %s", $mysqli->error);


i teraz wyświetla mi błąd z którego ja nic nie rozumie, poza tym, że mam błąd składni MySql:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ' xxxxxxxx, 3, ,
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,' at line 1


przy czym xxxxxxxx to jest fraza przypisana do zmiennej $password w moim przykładzie ....
Nie rozumie, dla czego server czepia się akurat tego ciągu znaków a pierwszy ($email) mu najwyraźniej odpowiada ?

Ten post edytował codex 29.11.2015, 16:05:21
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Polecam poczytać o prepared statements i SQL injection. A przynajmniej stosować mysqli_real_escape_string

Co do problemu: każdy string powinien być opakowany apostrofem lub cudzysłowem - najprawdopodobniej o to się rzuca skrypt.
Go to the top of the page
+Quote Post
codex
post
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 29.11.2015

Ostrzeżenie: (0%)
-----


Zrobiłem Commander jak pisałeś - opakowałem stringi w cudzysłowy. Teraz wywala mi taki error:


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xxxxxxxx, 3, "", ")' at line 1



Słabo kumam angielski.
1. Czy tam nie ma być jakiś przecinek na końcu tej listy parametrów ?
2. Co oznacza ta liczba 3 w komunikacie błędu - liczba parametrów po 'xxxxxxxx' ? - (by się zgadzało) czy zbieg okoliczności
3. Co do mysqli_real_escape_string oraz innych kwestii bezpieczeństwa - przyjdzie czas nie mogę narzucać sobie dodatkowego
materiału teraz gdy mi przyszło ogarniać HTML, PHP, JS, CSS i teraz jeszcze zderzenie MySql (IMG:style_emoticons/default/facepalmxd.gif) styknie.
w ogóle co do bezpieczeństwa ... na szybko to przypomniał mi się art gynvaela o funkcji printf() użytej w formularzach,
myślę, że kwestia bezpieczeństwa to zbyt szeroki temat teraz bo mam tak, że jak zacznę coś to .... (IMG:style_emoticons/default/smile.gif) . Na teraz to chcę mieć
serwis który cos robi, normalnie działa. mam tyle na razie:
free poker
bez kwestii bezpieczeństwa się nie obejdzie ponieważ można by było oszukiwać jak to w pokerze bywa (IMG:style_emoticons/default/smile.gif)

-----------------------------------------
edycja:
Nie mogę korzystać z wersji mysql mo server wywala błędy, że funkcja jest przestarzała w miejsce tego muszę mysqli
podawać. da się to jakoś poustawiać żeby łykał mysql było by łatwiej - jest masa przykładów użycia.

Ten post edytował codex 29.11.2015, 17:08:46
Go to the top of the page
+Quote Post
casperii
post
Post #6





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


  1. INSERT INTO `table` (
  2. `field1`,
  3. `field2`
  4. ) VALUES (
  5. '".$value1."',
  6. '".$value2."')
Go to the top of the page
+Quote Post
codex
post
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 29.11.2015

Ostrzeżenie: (0%)
-----


Dzieeeeki ci dobry człowieku casperii (IMG:style_emoticons/default/exclamation.gif) ! O to chodziło. Jakoś nigdzie nie widziałem wcześniej podobnego zapisu !
Działa wszystko elegancko - sprawdziłem w phpadmin. przepisałem linie jak poleciłeś. Wkleję je jeszcze raz poniżej gdyby ktoś miał podobny problem:
oto przerobione linijki kodu:
  1. $query = "INSERT INTO `userlog` (`username`,
  2. `userpassword`,
  3. `userlevel`,
  4. `userhost`,
  5. `useragent` )
  6. VALUES (
  7. '".$email."',
  8. '".$password."',
  9. '".$defaultUserLevel."',
  10. '".$userHost."',
  11. '".$userBrowser."')";
  12. if (!$mysqli->query($query)) printf("nie dodano rekordu error: %s", $mysqli->error);


Ważne, że wystarczy pominąć pole z właściwością auto_increment - nie trzeba stosować NULL ani pustego stringu.
Amen.
Go to the top of the page
+Quote Post
Comandeer
post
Post #8





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Jest jeszcze inny zapis, IMO jeszcze bardziej fajny:
Kod
INSERT INTO tabela SET pole = value, pole2 = value2
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 19:55